home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CDC / CDCSXSRC.LZH / LBSRC.LZH / SKELTON.HAS < prev    next >
Text File  |  1995-03-20  |  28KB  |  1,282 lines

  1. *======================================================*
  2. *
  3. *
  4. *    SX-WINDOW スケルトン イベントループ部
  5. *            1995.03.10
  6. *    You Utzse@電脳魔術団@Mankaiseisakujo /1993-1995
  7. *
  8. *
  9. *======================================================*
  10.     .include    DOSCALL.MAC    *標準の奴(XC)
  11.     .include    SXCALL.MAC
  12.     .include    SXCALL.H
  13.     .include    YOU200.MAC    *独自のマクロ定義ファイルです
  14.     .include    HASMACRO.MAC    *HAS2.5以降のマクロパッケージ
  15.  
  16.     .include    WORK.INC    *ワークエリアの内容を定義するファイル
  17.     .include    FLAG.INC    *条件付アセンブル処理を定義するファイル
  18.  
  19. .if    USE_MSXLIB=1
  20.     .include    MSXLIB.MAC    *MSXLIBをアセンブラから利用する場合
  21.                     *のヘッダファイル…
  22. .endif
  23.  
  24. *    .xref    _ULDrawUsingL
  25. *    .xref    _ULUsingL
  26.  
  27.     .xref    InitGraph
  28. *==============================================*
  29. *        MODULE_HEAD_AREA
  30. *----------------------------------------------*
  31. .text
  32. *        dc.b    '$id EV_LOOP Skelton by You Utzse version2.0 rel.1.minus$'
  33. *.even
  34. *.data
  35. MDHEAD:                        *[ モジュールヘッダ ]
  36.     dc.l    OBJECT+MDTYPE        *モジュールタイプ
  37. *    dc.l    $160C            *プログラムエリアサイズ (Xファイルの場合意味がない)
  38.     dc.l    KEKE-MDHEAD            *プログラムエリアサイズ (Xファイルの場合意味がない)
  39.     dc.l    SXSTART-MDHEAD        *SX-SHELLからのスタートアドレスオフセット
  40.     dc.l    WORKSIZE+STKSIZE    *ワークエリアのサイズ
  41.     dc.l    COMMONSIZE        *コモンエリアのサイズ
  42.     dc.l    0,0,0            *システム予約
  43. .text
  44. *==============================================*
  45. *        DOS_EXEC_ENTRY
  46. *----------------------------------------------*
  47. DOSSTART::                    *コマンドラインから起動した場合
  48. *                        *ここからスタートする
  49.  
  50. *    lea    64(a1),a1
  51. *    move.l    a1,sp
  52. *    lea    16(a0),a0
  53. *    sub.l    a0,a1
  54. *    move.l    a1,-(sp)
  55. *    pea    (a0)
  56. *    DOS    _SETBLOCK        *専有メモリを縮小する
  57. *
  58. *    clr.l    -(sp)
  59. *    pea    shcomm(pc)
  60. *    pea    shname(pc)
  61. *    move.w    #2,-(sp)
  62. *    DOS    _EXEC            *デバッグ用カーネルのパスをサーチする
  63. *    clr.l    -(sp)
  64. *    pea    shcomm(pc)
  65. *    pea    shname(pc)
  66. *    clr.w    -(sp)
  67. *    DOS    _EXEC            *デバッグ用カーネルを起動する
  68. *
  69. *    tst.l    d0            *正常に終了した場合
  70. *    bpl    p_execi1        *そのまま終了
  71. *
  72. *    pea    mes_execerr(pc)        *エラーメッセージを
  73. *    DOS    _PRINT            *表示する
  74. *p_execi1:
  75. *    DOS    _EXIT            *終了
  76. *
  77. *.data
  78. *mes_execerr:
  79. *    dc.b    'カーネルの起動に失敗しました!!!',13,10,0
  80. *.even
  81. *shname:
  82. *    dc.b    'A:\SHELL\SXWDB.X -D -K -R7 -L1',0        *カーネルのオプション
  83. *.even
  84. *.bss
  85. *shcomm:
  86. *    ds.b    258
  87. *==============================================*
  88. *        SX_SHELL_ENTRY
  89. *----------------------------------------------*
  90. .text
  91. .even
  92. SXSTART::                *SX-SHELLから起動した場合ここからスタートする
  93.     movea.l    a1,a5            *ワークエリア先頭アドレス
  94.     move.l    a2,cmdLine(a5)        *コマンドラインアドレス
  95.     move.l    a3,envPtr(a5)        *環境アドレス
  96.  
  97.     moveq.l    #0,d0
  98.     move.l    d0,-(sp)
  99.     move.w    #1,-(sp)        *文字列テーブルを再配置不能ブロックに
  100.     move.l    d0,-(sp)        *つくるモード
  101.     pea.l    winRect(a5)
  102.     pea.l    (a2)            *コマンドラインアドレス
  103.     SX    __TSTakeParam,18
  104.     tst.l    d0
  105.     bmi    EXIT2
  106.     move.w    d0,paramFlg(a5)        *オプションを得る
  107.     move.l    a0,argTbl(a5)        *文字列テーブルのアドレス
  108.  
  109. .ifdef    ~VERSION
  110.     jbsr    CHKVER            *[バージョンチェック]
  111.     bmi    EXIT2            *終了処理なしの終了ルーチン
  112. .endif
  113.  
  114.     jbsr    InitWork        *[ワーククリア]
  115.     jbsr    InitInfo        *[パス名/タスク関連の初期化]
  116. .iff    OPTION_SW=0
  117. .xref    SWITCHproc
  118.     move.l    argTbl(a5),-(sp)    *文字列テーブルの先頭アドレス
  119.     move.w    #SW_CHK,-(sp)
  120.     SXSUB    SWITCHproc,6
  121.     bmi    EXIT2
  122. .endif
  123.  
  124. .xref    Initproc
  125.     jbsr    Initproc
  126.     bmi    EXIT2
  127.  
  128. .if    WINCOUNT>=1
  129. .if    EXTENDED_WIN=1
  130. xref    InitWin
  131. .endif
  132.     jbsr    InitWin            *[ウィンドウの初期化]
  133.     bmi    EXIT
  134. .endif
  135.  
  136. .if    WINCOUNT>=1
  137. .xref    CtrlInitproc
  138.     jbsr    CtrlInitproc        *コントロール初期化(外部で用意)
  139.     bmi    EXIT
  140. .endif
  141.  
  142.     move.w    #USR_EV_MASK,eventMask(a5)
  143.  
  144. *==============================================*
  145. *        MAIN_LOOP
  146. *----------------------------------------------*
  147. MAIN_LOOP::
  148.     pea    eventRec(a5)
  149.     move.w    eventMask(a5),-(sp)
  150.     SX    __TSEventAvail,6    *イベント取得
  151.  
  152.     moveq.l    #%1111,d0
  153.     and.w    eventRec_what(a5),d0        *コードが返る
  154.     add.w    d0,d0
  155.     move.l    d0,S_event(a5)            *「サブ」のウィンドウが参照するワーク
  156.     move.w    eventTable(pc,d0.w),d0        *イベントコードによって
  157.     jsr    eventTable(pc,d0.w)        *分岐する
  158.     blt    EXIT                *終了ならmove.l #-1,d0してもどる
  159.  
  160. .iff    WINCOUNT<=1
  161. .xref    SUB_LOOP
  162.     jbsr    SUB_LOOP        *他にウィンドウを開くなら飛ぶ
  163.     blt    EXIT            *終了ならmove.l #-1,d0してもどる
  164. .endif
  165.  
  166.     bra    MAIN_LOOP
  167.  
  168. *----------------------------------------------*
  169. eventTable:                    *分岐テーブル
  170.     dc.w    IDLE-eventTable            *0    アイドルイベント
  171.     dc.w    MSLDOWN-eventTable        *1    レフトダウンイベント
  172.     dc.w    MSLUP-eventTable        *2    レフトアップイベント
  173.     dc.w    MSRDOWN-eventTable        *3    ライトダウンイベント
  174.     dc.w    MSRUP-eventTable        *4    ライトアップイベント
  175.     dc.w    KEYDOWN-eventTable        *5    キーダウンイベント
  176.     dc.w    KEYUP-eventTable        *6    キーアップイベント
  177.     dc.w    UPDATE-eventTable        *7    アップデートイベント
  178.     dc.w    dammy-eventTable        *8    --
  179.     dc.w    ACTIVATE-eventTable        *9    アクティベイトイベント
  180.     dc.w    dammy-eventTable        *10    --
  181.     dc.w    dammy-eventTable        *11    --
  182.     dc.w    SYSTEM1-eventTable        *12    システムイベント1
  183.     dc.w    SYSTEM2-eventTable        *13    システムイベント2
  184.     dc.w    dammy-eventTable        *14    システムイベント3
  185.     dc.w    dammy-eventTable        *15    システムイベント4
  186. *==============================================*
  187. *通常不要なイベント
  188. *----------------------------------------------*
  189. MSLUP::
  190. MSRUP::
  191. KEYUP::
  192. dammy::
  193.     ~T
  194.     rts                    *なにもしないで戻る
  195. *==============================================*
  196. IDLE::
  197. .iff    IDLE_MASK=0
  198. .xref    IDLEproc
  199.     SXSUB    IDLEproc,0
  200. .endif
  201.     rts
  202. *==============================================*
  203. *        EVENT_ROUTINE
  204. *==============================================*
  205. *[レフトダウンイベント]
  206. *左クリックの操作
  207. *
  208. *----------------------------------------------*
  209. MSLDOWN::
  210. .if    WINCOUNT>=1
  211. .xref    MSLDproc
  212.     move.l    eventRec_whom1(a5),d0    *左クリックが起きたウィンドウレコード
  213.     beq    MSLD9            *NILなら
  214.     Xlea    winPtr(a5),a1        *自分のウィンドウ上で発生したか?
  215.     cmp.l    a1,d0
  216.     bne    MSLD9            *違うならMSLD9へ
  217.  
  218.     SETPORT3 winPtr(a5)        *自分へのイベントなので問答無用でSETPORTする
  219.  
  220.     SXSUB    GetEvent,0        *自分へのイベントなのでイベントを取り除く
  221.  
  222.     jbsr    ChkMouse_DClick        *ダブルクリックの判定
  223.  
  224.     SXSUB    MSLDproc,0        *(d0に戻り値いれること
  225.                     *エラーチェックずみのこと)
  226.  
  227.     cmp.w    #W_INCLOSE,d0        *クローズボックス?
  228.     beq    CloseBox        *ならばお終い
  229.  
  230. MSLD9:
  231.     ~T
  232.     rts
  233. .endif
  234. *==============================================*
  235. *[ライトダウンイベント]
  236. *----------------------------------------------*
  237. MSRDOWN::
  238. .if    WINCOUNT>=1
  239. .xref    MSRDproc
  240.     move.l    eventRec_whom1(a5),d0        *右クリック時のウィンドウレコード
  241.     beq    MSRD9                *NILなら
  242.     Xlea    winPtr(a5),a0            *自分のウィンドウレコード
  243.     cmp.l    a0,d0                *同じウィンドウ上で発生したか
  244.     bne    MSRD9
  245.  
  246.     tst.w    winActive(a5)            *現在ウィンドウはアクティブか?
  247.     beq    MSRD9                *非アクティブならリターン
  248.  
  249.     SETPORT3 winPtr(a5)
  250.  
  251.     SXSUB    ChkMousePtr,0            *現在のマウスのローカル座標を
  252.                         *ワークにいれる
  253.     SXSUB    MSRDproc,0
  254.     bmi    MSRD_ERR
  255. .endif
  256. MSRD9:
  257.     ~T
  258.     rts
  259. MSRD_ERR:
  260.     ~F
  261.     rts
  262. *==============================================*
  263. *[キーダウンイベント]
  264. *----------------------------------------------*
  265. KEYDOWN::
  266. .if    WINCOUNT>=1
  267. .xref    KEYDproc
  268.     ifne    <tst.w    winActive(a5)>        *現在ウィンドウはアクティブか?
  269.         ifeq    <SCUT    K_Q,KS_OPT1>
  270.             ~F
  271.             rts            *アクティブでOPT1+Qなら終了
  272.         endif
  273.     endif
  274. .endif
  275.  
  276.     SXSUB    KEYDproc,0
  277.     ~T
  278.     rts
  279. *==============================================*
  280. *[アップデートイベント]
  281. *----------------------------------------------*
  282. UPDATE::
  283. .if    WINCOUNT>=1
  284. .xref    UPDTproc
  285.     Xpea    winPtr(a5)
  286.     SX    __WMUpdate,4
  287.  
  288.     SXSUB    UPDTproc,0
  289.  
  290.     Xpea    winPtr(a5)
  291.     SX    __WMUpdtOver,4
  292. .endif
  293.     ~T
  294.     rts
  295. *==============================================*
  296. *[ アクティベートイベント ]
  297. *----------------------------------------------*
  298. ACTIVATE::
  299. .if    WINCOUNT>=1
  300. .xref    ACTproc
  301.     move.l    eventRec_whom1(a5),d0
  302.     beq    ACT9                *NILなら
  303.     Xlea    winPtr(a5),a0            *自分のウィンドウが
  304.     cmp.l    a0,d0                *アクティブになった?
  305.     bne    ACT0                *違うのならACT0へ
  306.     move.w    #-1,winActive(a5)        *アクティブフラグをセット
  307.  
  308.     jbsr    ACTproc
  309.     bra    ACT9
  310. ACT0:
  311.     move.w    #0,winActive(a5)        *アクティブフラグをリセット
  312.     jbsr    ACTproc
  313. .endif
  314. ACT9:
  315.     ~T
  316.     rts
  317. *==============================================*
  318. *[システムイベント]
  319. *----------------------------------------------*
  320. SYSTEM1::
  321. SYSTEM2::
  322.     move.w    eventRec_what2(a5),d0
  323.     cmp.w    #ENDTSK,d0            *タスクの終了?
  324.     beq    CloseBox            *ならばおしまい
  325.     cmp.w    #CLOSEALL,d0            *全ウィンドウのクローズ?
  326.     beq    CloseBox            *ならばおしまい
  327.     ifeq    <cmp.w    #WINDOWSELECT,d0>    *ウィンドウのセレクト?
  328.         move.l    d0,-(sp)
  329.         jbsr    MainWindowSelect    *ならばWindowSelectへ
  330.         move.l    (sp)+,d0
  331.     endif
  332. .iff    OPTION_MODE=0
  333. *.xref    SWstr_create
  334.     move.l    d0,-(sp)            *他にセーブするものがある場合の保険
  335.     ifeq    <cmp.w    #SAVE,d0>        *FLAG.INCでオプションあり設定なら
  336.         move.w    #SW_SAVE,-(sp)
  337.         SXSUB    SWITCHproc,2        *OPTIONセーブルーチンが組み込まれる
  338.     endif
  339.     move.l    (sp)+,d0            *メインループには戻らない
  340. .endif
  341.  
  342. .iff    EXT_SYS_EV=0
  343. .xref    SYSproc
  344.     jbsr    SYSproc                *その他のイベントに対応するなら飛ぶ
  345.     rts                    *結果はd0に入れて返ること
  346. .endif
  347.     ~T
  348.     rts
  349.  
  350. *==============================================*
  351. *ウィンドウをアクティブにする
  352. *----------------------------------------------*
  353. MainWindowSelect::
  354. .if    WINCOUNT>=1
  355.     Xpea    winPtr(a5)            *自分のウィンドウをアクティブに
  356.     SX    __WMSelect,4
  357. .endif
  358.     ~T
  359.     rts
  360. *==============================================*
  361. *クローズボックス
  362. *----------------------------------------------*
  363. CloseBox::
  364.     ~F
  365.     rts
  366. *==============================================*
  367. *        EXIT
  368. *==============================================*
  369. EXIT::                        *[終了する]
  370.     jbsr    TINI                *アプリケーションの終了処理
  371. EXIT2:                        *[いきなり終了する]廃棄するものがなにもない
  372.     move.l    d0,-(sp)
  373.     SX    __TSExit,0
  374.  
  375.  
  376. *==============================================*
  377. TINI::
  378. .if    WINCOUNT>=1
  379.  
  380. .xref    CtrlTiniproc
  381.     jbsr    CtrlTiniproc
  382.  
  383.     Xpea    winPtr(a5)            *メインウィンドウの廃棄
  384.     .if    WINTYPE='H'
  385.         SX    __WMClose,4
  386.     .else
  387.     .if    WINTYPE='P'
  388.         SX    __WMDispose,4
  389.     .endif
  390.     .endif
  391. .xref    TINIproc
  392.     SXSUB    TINIproc,0            *メモリ廃棄など
  393. .endif
  394.         rts
  395. *==============================================*
  396. *デフォルトのウィンドウ生成
  397. *==============================================*
  398. .if    EXTENDED_WIN=0
  399. .if    WINCOUNT>=1
  400. InitWin:
  401.     move.l    winRect(a5),d0
  402.     move.w    paramFlg(a5),d1
  403.     btst    #0,d1                *'-W'オプションが指定された?
  404.     beq    _POS0                *されなかったら_POS0へ
  405.  
  406.     move.l    winRect+4(a5),d1        *正しいレクタングルが指定されたか
  407.     beq    _POS1                *X2,Y2が0
  408.     tst.w    d1
  409.     cmp.w    d0,d1
  410.     ble    _POS1                *Y2がY1より小さいか同じ
  411.     swap    d0
  412.     swap    d1
  413.     cmp.w    d0,d1
  414.     bgt    _POS2                *まっとうな時
  415.     swap    d0
  416.     swap    d1
  417.     bra    _POS1                *X2がX1より小さいか同じ
  418. _POS0:
  419.     SX    __TSGetWindowPos,0
  420.     move.l    d0,winRect(a5)            *デフォルト位置を得る
  421. _POS1:
  422.     add.l    #WIN_X*$10000+WIN_Y,d0        *ウィンドウレクタングルを作成
  423.     move.l    d0,winRect+4(a5)
  424. _POS2:
  425. main_win_open:
  426.     move.l    taskID(a5),-(sp)        *タスクID
  427.     move.w    #TRUE,-(sp)            *クローズボックスあり
  428.     move.l    #TRUE,-(sp)            *手前に
  429.     move.w    #_WDEF_NUM*16+WINOPT,-(sp)    
  430.     move.w    #TRUE,-(sp)            *可視
  431.     pea.l    WINTITLE(pc)            *LASCII
  432.     pea.l    winRect(a5)            *ウィンドウレクタングル
  433. .if    WINTYPE='H'
  434.     Xpea    winPtr(a5)            *ワーク上に作成
  435. .else
  436. .if    WINTYPE='P'
  437.     pea.l    0.w                *ヒープ上に作成
  438. .endif
  439. .endif
  440.     SX    __WMOpen,26
  441.     tst.l    d0                *エラー?
  442.     bmi    Win_init_ERR            *ならば_INIT_Errへ
  443.     move.w    #-1,winActive(a5)            *アクティブフラグをセット
  444. .if    WINTYPE='P'
  445.     move.l    a0,winPtr(a5)            *winPtrをヒープに確保させた時
  446. .endif
  447.     jbsr    InitGraph            *このウィンドウのグラフポートの初期設定
  448.     ~T
  449.     rts
  450. Win_init_ERR:
  451.         ~F
  452.         rts
  453. .endif
  454. WINTITLE:
  455.         MAINWIN_NAME
  456. .even
  457. .endif
  458. .text
  459. *==============================================*
  460. *        INIT共通
  461. *==============================================*
  462. *VERSION_CHECK
  463. * ~VERSION が定義されていること
  464. *----------------------------------------------*
  465. .ifdef    ~VERSION
  466. CHKVER:
  467.     SX    __SXVer,0            *システムのバージョンを取得
  468.     cmp.w    #~VERSION,d0            *(~VERSION)どのバージョン以降で動くか
  469.     bcs    VER_ERR                *バージョンエラー
  470.     ~T
  471.     rts
  472. VER_ERR:
  473.     lea.l    ver_e_mes(PC),a0        *「バージョンが違う」
  474.     jbsr    PrintMyErr
  475.     rts
  476. .endif
  477. *==============================================*
  478. *A5相対で参照するワークを初期化する
  479. *----------------------------------------------*
  480. InitWork:
  481.  
  482.     move.l    #clr_end-clr_top,d0        *何バイトか
  483.     lea.l    clr_top(a5),a0            *どのアドレスからか
  484.     moveq.l    #0,d1                *0で埋める
  485.     jbsr    FillMem
  486.  
  487.     rts
  488. *==============================================*
  489. *タスクIDと、パス、タスク名、ファイル
  490. *名を取り出す
  491. ofs    =    -512
  492.     .offset    ofs
  493. task_WK        ds.b    512
  494. .text
  495. *----------------------------------------------*
  496. InitInfo:
  497.     SX    __TSGetID,0
  498.     move.l    d0,taskID(a5)            *タスクIDを得る
  499.  
  500.     link    a6,#ofs
  501.  
  502. *        moveq.l    #-1,d0
  503. *        move.w    d0,-(sp)        *自分のID
  504.     movqw    -1
  505.     pea    task_WK(a6)
  506.     SX    __TSGetTdb,6
  507. *----------------------------------------------*
  508. *PATH
  509.     lea    my_path(a5),a3
  510.     pea    (a3)                *パス名格納先
  511.     pea    task_WK(a6)            *ファイル名へのポインタ
  512.     SX    _NAMECK,8            *DOSCALL
  513. *----------------------------------------------*
  514. *NAME
  515.     lea    my_name(a5),a2
  516.     move.l    a2,a0                *名前を入れる先
  517.     lea    67(a3),a1            *ファイル名へのアドレス
  518.     jbsr    CopyStrZ
  519. *----------------------------------------------*
  520. *MY_LEN
  521.     move.l    a0,d0
  522.     sub.l    a2,d0
  523.     move.b    d0,my_len(a5)            *NAMEの長さ
  524. *----------------------------------------------*
  525. *MY FILENAME
  526.     lea    my_file(a5),a0            *ファイル名の入先
  527.     lea    67(a3),a1            *(ファイル名へのアドレス)
  528.     jbsr    CopyStrZ
  529.  
  530.     lea    86(a3),a1            *(拡張子へのアドレス)
  531.     jbsr    CopyStrZ
  532. *----------------------------------------------*
  533. *PARENT ID CHECK
  534.     move.w    task_WK+tsParentID(a6),ParID(a5)
  535. *----------------------------------------------*
  536. *STARTUP CHECK                    *スタートアップから起動されたかどうか?
  537.     lea.l    task_WK(a6),a0
  538.     ifeq    <btst.b    #0,$1D5(a0)>
  539.         move.w    #0,StupChk(a5)
  540.     else
  541.         move.w    #-1,StupChk(a5)        *-1ならスタートアップから
  542.     endif
  543.  
  544.     unlk    a6
  545.     rts
  546. *==============================================*
  547. *        下請けルーチン
  548. *==============================================*
  549. *メモリを指定されたデータで埋める
  550. *93.10.01 rewrite
  551. *IN    d0.l = length (1..)
  552. *    d1.b = data
  553. *    a0.l = ptr
  554. *OUT    a0.l = nextPtr
  555. *    d0.l = RESAULT CODE(0,MINUS)
  556. *----------------------------------------------*
  557. FillMem::
  558.     move.l    d2,-(sp)
  559.     move.l    d1,-(sp)
  560.  
  561.     tst.l    d0
  562.     ble    FillMem_err            *length == 0
  563.  
  564.     move.l    a0,d2
  565.     lsr.w    #1,d2                *2で割って
  566.     bcc    FillMem_1            *アドレスが奇数なら分岐しない
  567.  
  568.     move.b    d1,(a0)+            *先頭を1バイト埋める
  569.     subq.l    #1,d0                *ながさの帳尻合わせる
  570.     ble    FillMem_9            *1バイトならおしまい
  571. FillMem_1:
  572.     jbsr    Fillsub
  573.  
  574. FillMem_9:
  575.         ~T
  576. FillMem_err:
  577.     move.l    (sp)+,d1
  578.     move.l    (sp)+,d2
  579.     rts
  580.  
  581. *==============================================*
  582. *ポインタの内容を指定されたデータで埋める
  583. *スタックに、データ(.w)と再配置不能ブロックのア
  584. *ドレスをいれる。データは、下位バイトのみを認識する
  585. *上位バイトは不定で構わない
  586. .offset    0
  587.         ds.l    2
  588. fp_ptr:        ds.l    1
  589.         ds.b    1
  590. fp_data:    ds.b    1
  591. .text
  592. *----------------------------------------------*
  593. FillPtr::
  594.     link    a6,#0
  595.     move.l    d1,-(sp)
  596.     move.l    d2,-(sp)
  597.  
  598.     move.l    fp_ptr(a6),-(sp)
  599.     SX    __MMPtrSizeGet,4        *ブロックの論理サイズを得る
  600.     move.l    d0,d2
  601.     blt    FillPtr_err
  602.     beq    FillPtr_9
  603.  
  604.     move.l    fp_ptr(a6),a0
  605.     move.b    fp_data(a6),d1
  606.  
  607.     jbsr    Fillsub
  608.  
  609. FillPtr_9:
  610.         ~T
  611. FillPtr_err:
  612.     move.l    (SP)+,d2
  613.     move.l    (SP)+,d1
  614.     unlk    A6
  615.     rts
  616. *==============================================*
  617. *ハンドルの内容を指定されたデータで埋める
  618. *スタックに、データ(.w)と再配置可能ブロックのハ
  619. *ンドルをいれる。データは、下位バイトのみを認識
  620. *するので上位バイトは不定で構わない
  621. .offset    0
  622.         ds.l    2
  623. fh_hdl:        ds.l    1
  624.         ds.b    1
  625. fh_data:    ds.b    1
  626. .text
  627. *----------------------------------------------*
  628. FillHdl::
  629.     link    a6,#0
  630.     move.l    d1,-(sp)
  631.     move.l    d2,-(sp)
  632.  
  633.     move.l    fh_hdl(a6),-(sp)
  634.     SX    __MMHdlSizeGet,4        *ブロックの論理サイズを得る
  635.     move.l    d0,d2
  636.     blt    FillHdl_err
  637.     beq    FillHdl_9            *空のハンドルということもある
  638.  
  639.     HDL2PTR    fh_hdl(a6),a0            *ハンドルから現在のアドレスを得る
  640.  
  641.     move.b    fh_data(a6),d1
  642.  
  643.     jbsr    Fillsub
  644.  
  645. FillHdl_9:
  646.     ~T
  647. FillHdl_err:
  648.     move.l    (SP)+,d2
  649.     move.l    (SP)+,d1
  650.         unlk    A6
  651.         rts
  652. *----------------------------------------------*
  653. *FILL系共通ルーチン
  654. Fillsub:
  655.     move.b    d1,d2
  656.     lsl.w    #8,d1
  657.     move.b    d2,d1
  658.     move.w    d1,d2
  659.     swap    d1
  660.     move.w    d2,d1            *4Byteのデータをd1に展開
  661.                     *(d1.b以外はなにが入っていても構わない)
  662.  
  663.     move.l    d0,d2            *length
  664.  
  665.     lsr.l    #4,d0            *16で割って
  666.     ble    Fillsub_1        *d0<16のとき
  667. Fillsub_lp:
  668.     move.l    d1,(a0)+
  669.     move.l    d1,(a0)+
  670.     move.l    d1,(a0)+
  671.     move.l    d1,(a0)+
  672.     subq.l    #1,d0
  673.     bne    Fillsub_lp
  674. Fillsub_1:
  675.     andi.l    #%1111,d2
  676.     beq    Fillsub_3
  677.     subq.l    #1,d2
  678. Fillsub_2:
  679.     move.b    d1,(a0)+
  680.     dbra    d2,Fillsub_2
  681. Fillsub_3:
  682.     rts
  683. *==============================================*
  684. *タスク名付きエラーダイアログ
  685. *TSErrDialogNでいいんだけどね…
  686. *IN    a0.l = メッセージへのポインタ
  687. *OUT    d0.l = -1
  688. OFS    =    -128
  689.     .offset    OFS
  690. PME_BUF        ds.b    128
  691. .text
  692. *----------------------------------------------*
  693. PrintMyErr::
  694.     link    a6,#OFS
  695.     movem.l    a1-a2,-(sp)
  696.     move.l    a0,a2
  697.  
  698.     lea.l    PME_BUF(a6),a0
  699.     move.l    a2,a1
  700.     jbsr    CopyStrZ
  701.  
  702.     lea.l    my_file(a5),a1
  703.     jbsr    CopyStrZ
  704.  
  705.     pea.l    PME_BUF(a6)
  706.     move.w    #YELLOW_F,-(sp)
  707.     SX    __DMError,6
  708.  
  709.     ~F
  710.     movem.l    (sp)+,a1-a2
  711.     unlk    a6
  712.     rts
  713. *==============================================*
  714. *エラーダイアログの表示。
  715. *in    a0.l = メッセージへのポインタ
  716. *out    d0.l = -1
  717. *----------------------------------------------*
  718. PrintErr::
  719.     pea    (a0)
  720.     move.w    #YELLOW_F,-(sp)        *黄旗
  721.     SX    __DMError,6
  722.  
  723.     ~F
  724.     rts
  725. *==============================================*
  726. *ASCIIZ 文字列をコピーする。
  727. *IN    a0.L = destPtr
  728. *    a1.L = srcPtr
  729. *OUT    a0.L = destPtr(文字列の最後を指す $0の位置)
  730. *    a1.L = srcPtr(文字列の最後+1を指す)
  731. *----------------------------------------------*
  732. CopyStrZ::
  733.     move.b    (a1)+,(a0)+
  734.     bne    CopyStrZ        *$0 でないなら
  735.     subq.l    #1,a0
  736.     rts
  737. *==============================================*
  738. *93.10.30 version
  739. *LASCII 文字列をコピーする。
  740. *IN    a0.L = destPtr
  741. *    a1.L = srcPtr
  742. *OUT    a0.L = destPtr(文字列の最後+1を指す)
  743. *    a1.L = srcPtr (文字列の最後+1を指す)
  744. *----------------------------------------------*
  745. CopyStrL::
  746.     moveq.l    #0,d0
  747.     move.b    (a1),d0            *カウンタ(これでいいのだ~)
  748. @@:
  749.     move.b    (a1)+,(a0)+
  750.     dbra    d0,@b
  751.     rts
  752. *==============================================*
  753. *イベントを取り除く。
  754. *カレントグラフポートをセット。
  755. *----------------------------------------------*
  756. GetEvent::
  757.     pea    eventRec(a5)
  758.     move.w    #EM_EVERY,-(sp)
  759.     SX    __TSGetEvent,6
  760.     rts
  761. *==============================================*
  762. *イベントを取り除く。
  763. *カレントグラフポートをセット。
  764. *----------------------------------------------*
  765. NextEvent::
  766.     pea    eventRec(a5)
  767.     move.w    #EM_MSTOKEY,-(sp)
  768.     SX    __EMGet,6
  769.     rts
  770. *==============================================*
  771. *ワークD_Clickに結果を格納。
  772. *ワークnow_mptにマウスのローカル座標を格納。
  773. *MS_time,MS_locateを使用。
  774. *SETPORTしてから使うこと
  775. *----------------------------------------------*
  776. ChkMouse_DClick::
  777.     move.l    eventRec_when(a5),d1    *左ダウンの時間(d1)が
  778.     move.l    d1,d0
  779.     sub.l    MS_time(a5),d1        *今回の左ダウンは直前の左ダウンの何秒後か
  780.     move.l    d0,MS_time(a5)        *ダウン時間を更新する
  781.  
  782.     tst.b    D_Click(a5)        *フラグチェック
  783.     bne    ChkMouse_skip        *ダブルクリック後なので、なにもしない
  784.  
  785.     move.l    eventRec_whom2(a5),d0
  786.     swap    d0
  787.     sub.w    MS_locate(a5),d0
  788.     addq.w    #3,d0            *前後2ポイント分の余裕見て
  789.     blt    ChkMouse_skip        *座標のチェック
  790.     subq.w    #6,d0
  791.     bgt    ChkMouse_skip
  792.     swap    d0
  793.     sub.w    MS_locate+2(a5),d0
  794.     addq.w    #3,d0
  795.     blt    ChkMouse_skip
  796.     subq.w    #6,d0
  797.     bgt    ChkMouse_skip
  798.  
  799.     SX    __EMDClickGet,0        *ダブルクリック基準時間を読み出すコール
  800.     cmp.l    d0,d1
  801.     sle.b    D_Click(a5)        *ダブルクリックフラグ
  802.  
  803.     bra    ChkMouse_q
  804.  
  805. ChkMouse_skip:
  806.     sf.b    D_Click(a5)        *フラグ下ろす
  807.  
  808. ChkMouse_q:
  809.     move.l    eventRec_whom2(a5),d0
  810.     move.l    d0,MS_locate(a5)    *今回の位置を記録
  811.  
  812.     move.l    d0,-(sp)
  813.     SX    __GMGlobalToLocal,4
  814.     move.l    d0,now_mpt(a5)        *ローカル座標(ちゃんと返ります)
  815.  
  816.     rts
  817.  
  818.  
  819. *==============================================*
  820. *ワークnow_mptにマウスのローカル座標を格納。
  821. *----------------------------------------------*
  822. ChkMousePtr::
  823.  
  824.     move.l    eventRec_whom2(a5),-(sp)
  825.     SX    __GMGlobalToLocal,4
  826.     move.l    d0,now_mpt(a5)        *ローカル座標
  827.     rts
  828.  
  829. *==============================================*
  830. *へこみレクタングルを書いたり、消したりする関数
  831. *    PEN MODE
  832. *    PENSIZE
  833. *    RECT
  834. *の順にスタックに積む
  835. *ペン位置は変更される
  836.  
  837. .offset        -18
  838. SBL:        ds.w    1            *LEFT
  839. SBT:        ds.w    1            *TOP
  840. SBR:        ds.w    1            *RIGHT
  841. SBB:        ds.w    1            *BOTTOM
  842. SBFC:        ds.w    1            *FORE COLOR
  843. SBBC:        ds.w    1            *BACK COLOR
  844. SBPM        ds.w    1            *PEN MODE
  845. SBPS        ds.l    1            *PEN SIZE
  846. ds.l    2
  847. SBptr:        ds.l    1            *レクタングルのアドレス
  848. SBPSize:    ds.l    1            *ペンサイズ
  849. SBPmode:    ds.w    1            *モード
  850. .text
  851. *==============================================*
  852. __ShadowBox::
  853.     link    a6,#-18
  854.     move.l    d1,-(sp)
  855.  
  856.     move.l    SBptr(a6),a0
  857.  
  858.     move.l    (a0),SBL(a6)
  859.     move.l    4(a0),SBR(a6)        *LTRBをいれる
  860.  
  861.     moveq.l    #G_BLACK,d0
  862.     move.w    d0,-(sp)
  863.     SX    __GMForeColor,2        *ForeColorを黒
  864.     move.w    d0,SBFC(a6)        *ForeColor退避
  865.  
  866.     move.w    SBPmode(a6),d0
  867.     tst.w    d0
  868.     bne    @f
  869.     moveq.l    #0,d0            *ForeColorでPSET
  870. @@:
  871.  
  872.     move.w    d0,-(sp)
  873.     SX    __GMPenMode,2
  874.     move.w    d0,SBPM(a6)
  875.  
  876.     move.l    SBPSize(a6),d0
  877.     tst.l    d0
  878.     bne    @f
  879.  
  880.     move.l    #1*$10000+1,-(sp)    *1,1
  881.     bra    ~SB1
  882. @@:
  883.     move.l    d0,-(sp)
  884. ~SB1:
  885.     SX    __GMPenSize,4
  886.     move.l    d0,SBPS(a6)        *PEN SIZEを退避
  887.  
  888.     move.w    SBL(a6),d1
  889.     swap    d1
  890.     move.w    SBB(a6),d1
  891.  
  892.     move.l    d1,-(sp)
  893.     SX    __GMMove,4        *左下
  894.  
  895.     move.w    SBT(a6),d1
  896.  
  897.     move.l    d1,-(sp)
  898.     SX    __GMLine,4        *左下から左上
  899.  
  900.     swap    d1
  901.     move.w    SBR(a6),d1
  902.     swap    d1
  903.  
  904.     move.l    d1,-(sp)
  905.     SX    __GMLine,4        *左上から右上
  906.  
  907.     moveq.l    #G_WHITE,d0
  908.     move.w    d0,-(sp)
  909.     SX    __GMForeColor,2        *ForeColorを白
  910.  
  911.     move.w    SBB(a6),d1
  912.  
  913.     move.l    d1,-(sp)
  914.     SX    __GMLine,4        *右上から右下
  915.  
  916.     swap    d1
  917.     move.w    SBL(a6),d1
  918.     swap    d1
  919.  
  920.     move.l    d1,-(sp)
  921.     SX    __GMLine,4        *右下から左下
  922.  
  923.     move.w    SBFC(a6),-(sp)
  924.     SX    __GMForeColor,2        *ForeColorを黒
  925.  
  926.     move.w    SBPM(a6),-(sp)
  927.     SX    __GMPenMode,2
  928.     move.w    d0,SBPM(a6)
  929.  
  930.     move.l    SBPS(a6),-(sp)
  931.     SX    __GMPenSize,4
  932.     move.l    d0,SBPS(a6)        *PEN SIZEを退避
  933.  
  934.     move.l    (sp)+,d1
  935.     unlk    a6
  936.     rts
  937. *===============================================*
  938. *    ローカルリソース(自分のパスのみ検索)
  939. *    オープンルーチン
  940. *    マイナスはエラー
  941. *    返り値    a0不定    d0=Resmapへのハンドル
  942. *    オープンするリソースファイルが1つの
  943. *    場合しか使えません(いまんとこ)
  944. *===============================================*
  945. .iff    USE_RES=0
  946. .offset    -92
  947. mro_path:    ds.b    92
  948. .text
  949. MYResOpen::
  950.     link    a6,#-92
  951.     move.l    a1,-(sp)
  952.     lea.l    my_path(a5),a1
  953.     lea.l    mro_path(a6),a0
  954.     jbsr    CopyStrZ
  955.     move.l    8(a6),a1
  956.     jbsr    CopyStrZ
  957.  
  958.     pea.l    mro_path(a6)
  959.     SX    __TSResOpen,4
  960.     bmi    MRO_err
  961.     movea.l    a0,a1
  962.     SX    __TSResLoad,0
  963.     move.l    a1,-(sp)
  964.     SX    __TSCurResSet,4
  965.     move.l    a1,d0
  966.     move.l    (sp)+,a1
  967.     unlk    a6
  968.     rts
  969. MRO_err:
  970.     lea.l    MRO_err_mes(pc),a0
  971.     jbsr    PrintMyErr
  972.  
  973.     move.l    (sp)+,a1
  974.     unlk    a6
  975.     ~F
  976.     rts
  977. MRO_err_mes:
  978.     dc.b    'リソースがオープンできません。',CR
  979.     dc.b    '実行ファイルと同じディレクトリに、',CR
  980.     dc.b    'LBファイルをインストールしてください。',CR,0
  981. .endif
  982. *===============================================*
  983. *    ローカルリソース(自分のパスのみ検索)
  984. *    クローズルーチン
  985. *===============================================*
  986. .iff    USE_RES=0
  987. .offset    -92
  988. mrc_path:    ds.b    92
  989. .text
  990. .xdef    MYResClose
  991. MYResClose:
  992.     link    a6,#-92
  993.     move.l    a1,-(sp)
  994.     lea.l    my_path(a5),a1
  995.     lea.l    mrc_path(a6),a0
  996.     jbsr    CopyStrZ
  997.     move.l    8(a6),a1
  998.     jbsr    CopyStrZ
  999.  
  1000.     pea.l    mro_path(a6)
  1001.     SX    __TSResClose,4
  1002.     bmi    MRC_err
  1003.     move.l    (sp)+,a1
  1004.     unlk    a6
  1005.     rts
  1006. MRC_err:
  1007.     lea.l    MRO_err_mes(pc),a0
  1008.     jbsr    PrintMyErr
  1009.  
  1010.     move.l    (sp)+,a1
  1011.     unlk    a6
  1012.     ~F
  1013.     rts
  1014. .endif
  1015. *===============================================*
  1016. *    ローカルリソース(自分のパスのみ検索)
  1017. *    セーブクローズルーチン
  1018. *===============================================*
  1019. .iff    USE_RES=0
  1020. .offset    -92
  1021. mrs_path:    ds.b    92
  1022. .text
  1023. .xdef    MYResSave
  1024. MYResSave:
  1025.     link    a6,#-92
  1026.     move.l    a1,-(sp)
  1027.     lea.l    my_path(a5),a1
  1028.     lea.l    mrs_path(a6),a0
  1029.     jbsr    CopyStrZ
  1030.     move.l    8(a6),a1
  1031.     jbsr    CopyStrZ
  1032.  
  1033.     pea.l    mro_path(a6)
  1034.     SX    __TSResSave,4
  1035.     bmi    MRS_err
  1036.     move.l    (sp)+,a1
  1037.     unlk    a6
  1038.     rts
  1039. MRS_err:
  1040.     lea.l    MRO_err_mes(pc),a0
  1041.     jbsr    PrintMyErr
  1042.  
  1043.     move.l    (sp)+,a1
  1044.     unlk    a6
  1045.     ~F
  1046.     rts
  1047. .endif
  1048. *===============================================*
  1049. *メニューアイテム変更1
  1050. *アクティブチェンジ
  1051. *move.l    メニューハンドル,-(sp)
  1052. *move.w    アイテム番号,-(sp)    1~
  1053. *move.w    変更フラグ,-(sp)    0,1
  1054. *0ならインアクティブ、1ならアクティブ
  1055. *-----------------------------------------------*
  1056. .iff    USE_MENU=0
  1057. .xdef    MNActChg
  1058. ofs    =    0
  1059. .offset    ofs
  1060. ds.l    2
  1061. MC_hdl:    ds.l    1
  1062. MC_num:    ds.w    1
  1063. MC_flg:    ds.w    1
  1064. .text
  1065. MNActChg:
  1066.     link    a6,#ofs
  1067.     movem.l    d1-d4/a1,-(sp)
  1068.  
  1069.     moveq    #0,d1
  1070.     move.l    d1,d2
  1071.     move.w    MC_num(a6),d1
  1072.     move.w    MC_num(a6),d4
  1073.     move.w    MC_flg(a6),d2
  1074.     move.l    MC_hdl(a6),a1
  1075.     move.l    (a1),a1            *Menuのadr
  1076.  
  1077.     subq.w    #1,d4
  1078.     cmp.w    18(a1),d4        *メニューアイテム数が少ない時
  1079.     bgt    MCerr
  1080.  
  1081.     ifeq    <tst.w    d2>        *インアクティブ
  1082.         move.l    10(a1),d3
  1083.         bclr.l    d1,d3
  1084.         move.l    d3,10(a1)
  1085.         moveq    #0,d0
  1086.         bra    MCend
  1087.  
  1088.     elseifeq    <cmpi.w    #1,d2>        *アクティブ
  1089.  
  1090.         move.l    10(a1),d3
  1091.         bset.l    d1,d3
  1092.         move.l    d3,10(a1)
  1093.         moveq    #0,d0
  1094.         bra    MCend
  1095.     endif
  1096. MCerr
  1097.     moveq    #-1,d0
  1098. MCend:
  1099.     movem.l    (sp)+,d1-d4/a1
  1100.     unlk    a6
  1101.     rts
  1102. .endif
  1103. *===============================================*
  1104. *メニューアイテム変更2
  1105. *チェックマークチェンジ
  1106. *move.l    メニューハンドル,-(sp)
  1107. *move.w    アイテム番号,-(sp)    1~
  1108. *move.w    変更フラグ,-(sp)    0,1
  1109. *0ならマークなし、1ならマークセット
  1110. *-----------------------------------------------*
  1111. .iff    USE_RES=0
  1112. .xdef    MNChkMChg
  1113. ofs    =    0
  1114. .offset    ofs
  1115. ds.l    2
  1116. MCM_hdl:    ds.l    1
  1117. MCM_num:    ds.w    1
  1118. MCM_flg:    ds.w    1
  1119. .text
  1120. MNChkMChg:
  1121.     link    a6,#ofs
  1122.     movem.l    d1-d7/a1-a4,-(sp)
  1123.  
  1124.     moveq    #0,d1
  1125.     move.l    d1,d2
  1126.     move.l    d1,d5
  1127.     move.l    d1,d6
  1128.     move.w    MCM_num(a6),d1
  1129.     move.w    MCM_num(a6),d4
  1130.     move.w    MCM_flg(a6),d2
  1131.     move.l    MCM_hdl(a6),a1
  1132.     move.l    (a1),a1            *Menuのadr
  1133.     lea.l    20(a1),a2        *Mdataの先頭adr
  1134.  
  1135.     subq.w    #1,d4            *1減らす
  1136.     cmp.w    18(a1),d4        *変な値取ってないかチェック
  1137.     bgt    MCMerr
  1138.  
  1139. @@:
  1140.     cmp.b    d4,d6            *d6.b=COUNTER
  1141.     beq    @f
  1142.     addq.b    #1,d6            *カウンタ増
  1143.     move.b    2(a2),d5        *d5.b=LASCII文字数
  1144.     ifeq    <btst.l    #0,d5>
  1145.             addq.b    #1,d5        *偶数バンダリ調整(LASCIIが偶数時1追加)
  1146.     endif
  1147.     addq.b    #3,d5
  1148.     adda.l    d5,a2            *次のアイテムの先頭
  1149.     moveq    #0,d5
  1150.     bra    @b
  1151. @@:
  1152.     ifeq    <tst.w d2>        *チェックマーク消す
  1153.         sf    1(a2)    *バイトでクリア
  1154.         moveq    #0,d0
  1155.         bra    MCMend
  1156.     elseifeq <cmpi.w #1,d2>        *アクティブ
  1157.         st    1(a2)    *バイトでセット
  1158.         moveq    #0,d0
  1159.         bra    MCMend
  1160.     endif
  1161.  
  1162. MCMerr:
  1163.     moveq    #-1,d0
  1164. MCMend:
  1165.     movem.l    (sp)+,d1-d7/a1-a4
  1166.     unlk    a6
  1167.     rts
  1168. .endif
  1169. *===============================================*
  1170. .offset    0
  1171. ds.l    2
  1172. TimerP:        ds.l    1
  1173. TickBase:    ds.l    1
  1174. .text
  1175. *===============================================*
  1176. Timerproc::
  1177.     move.l    d1,-(sp)
  1178.  
  1179.     SX    __EMSysTime,0
  1180.  
  1181.         move.l    d0,d1
  1182.         movea.l    TimerP(sp),a0
  1183.         sub.l    (a0),d0        *カウントダウンして、時間きたかをd0に返す
  1184.  
  1185.     ifcs    <cmp.l    TickBase(sp),d0>
  1186.         moveq    #0,d0            *まだ時間きてない
  1187.         bra    TP9
  1188.     else
  1189.         move.l    d1,(a0)
  1190.         moveq    #-1,d0            *きちゃった
  1191.         bra    TP9
  1192.     endif
  1193.  
  1194. TP9:
  1195.     move.l    (sp)+,d1
  1196.     rts
  1197. *===============================================*
  1198. _ULUsingL::
  1199.     link    a6,#-30
  1200.     lea.l    -$001e(a6),a1
  1201.     movea.l    a1,a0
  1202.     move.l    $000c(a6),d0
  1203.     movea.l    a0,a0
  1204.     dc.w    $FE11        *__LTOS
  1205.     move.l    a1,-(a7)
  1206.     move.l    $0010(a6),-(a7)
  1207.     move.l    $0008(a6),-(a7)
  1208. *    jsr    __ULCopyTail
  1209.     bsr    __ULCopyTail
  1210.     unlk    a6
  1211.     rts
  1212.  
  1213. __ULCopyTail::
  1214.     move.l    $0004(a7),d2
  1215.     move.l    $0008(a7),d1
  1216.     movea.l    d2,a1
  1217.     adda.l    d1,a1
  1218.     moveq.l    #$00,d0
  1219.     movea.l    $000c(a7),a0
  1220.     bra    L0017d4
  1221.  
  1222. L0017d0:
  1223.     addq.w    #1,a0
  1224.     addq.l    #1,d0
  1225. L0017d4:
  1226.     tst.b    (a0)
  1227.     bne    L0017d0
  1228.     cmp.l    d0,d1
  1229.     bge    L0017de
  1230.     move.l    d1,d0
  1231. L0017de:
  1232.     move.b    (a0),(a1)
  1233.     subq.w    #1,a0
  1234.     subq.w    #1,a1
  1235.     bra    L0017ee
  1236.  
  1237. L0017e6:
  1238.     move.b    (a0),(a1)
  1239.     subq.w    #1,a0
  1240.     subq.w    #1,a1
  1241.     subq.l    #1,d0
  1242. L0017ee:
  1243.     tst.l    d0
  1244.     bgt    L0017e6
  1245.     bra    L0017fa
  1246.  
  1247. L0017f4:
  1248.     move.b    #$20,(a1)
  1249.     subq.w    #1,a1
  1250. L0017fa:
  1251.     cmp.l    a1,d2
  1252.     ble    L0017f4
  1253.     rts
  1254.  
  1255.  
  1256. *===============================================*
  1257. *        DATA_AREA
  1258. *-----------------------------------------------*
  1259. .data
  1260. .even
  1261. e_mes::
  1262.     dc.b    'エラーが発生しました',CR,LF,0
  1263.     .even
  1264. ver_e_mes:
  1265.     dc.b    'このバージョンのSXシステムでは動作しません',CR,LF,0
  1266.     .even
  1267. KEKE:
  1268. *===============================================*
  1269. .end
  1270. *.end    DOSSTART
  1271. *
  1272. *このスケルトンは複数のウィンドウを出すことに一応
  1273. *対応している。
  1274. *注意として、メインのウィンドウは、
  1275. *サブ扱いのウィンドウ(サブウィンドウではない)
  1276. *が使うイベントをマスクしてはいけない
  1277. *また、通常は、サブのウィンドウには、上位ワードに
  1278. *0以外を入れてタスクIDを登録することになってい
  1279. *るが、これを行った場合、サブのウィンドウにはキー
  1280. *ダウンイベントが来なくなる
  1281. *
  1282.